Some computer systems have a firmware basic input/output system (“BIOS”) containing basic routines which are accessed to boot the computer as well as to initialize and interface hardware with operating system software. In many modern computer systems, the BIOS code is stored as groups of memory “blocks” in one or more re-programmable memory devices. These re-programmable memory devices, which are typically known as “flash” parts, are a type of non-volatile random access memory (“NVRAM”) allowing the BIOS code to be easily updated by using software to erase and program each flash part. Most flash parts are divided into sectors which enable a portion of BIOS code stored in a flash part to be updated without modifying the remainder of the code. One such sector includes a hardware protected memory block of a fixed size called a “boot block” which can not be erased when the hardware protection is engaged. The boot block in a flash part may store program code for starting a computer system as well as a self contained recovery code for recovering the BIOS to the flash part in the event the BIOS is unintentionally erased.
In recent years the number of flash part vendors has increased resulting in a corresponding increase in the number of flash part models that must be supported by a particular BIOS in a computer system. However, the addition of new flash parts poses a number of problems for the boot block sector. First, each time support for a new flash part model is added to a BIOS, the boot block code must be updated to recognize each new flash part model. Second, in a particular BIOS, the different flash part models may require that unique program code for recovering the contents of a flash part be stored in the boot block sector. However, due to the fixed size of the boot block sector in a flash part, there is a risk of running out of space to store the recovery code in the boot block as support for new flash parts are added.
It is with respect to these considerations and others that the present invention has been made.